package pe.com.cotelasa.scp.controlador;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import pe.com.cotelasa.common.controlador.MBGenerico;
import pe.com.cotelasa.scp.common.IObserver;
import pe.com.cotelasa.scp.controlador.backingBean.BKComponenteArticulo;
import pe.com.cotelasa.scp.controlador.backingBean.BKComponenteCtaBancaria;
import pe.com.cotelasa.scp.controlador.backingBean.BKComponenteLocal;
import pe.com.cotelasa.scp.controlador.backingBean.BKComponenteServicio;
import pe.com.cotelasa.scp.dominio.common.helper.SelectOneMenuHelper;
import pe.com.cotelasa.scp.controlador.backingBean.BKContacto;
import pe.com.cotelasa.scp.controlador.backingBean.BKProveedor;
import pe.com.cotelasa.scp.controlador.backingBean.BKUbigeo;
import pe.com.cotelasa.scp.controlador.comando.ComandoActualizar;
import pe.com.cotelasa.scp.controlador.comando.ComandoGuardar;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.service.IServicioParametro;
import pe.com.cotelasa.scp.dominio.service.IServicioProveedor;
import pe.com.cotelasa.scp.dominio.service.IServicioTipoMoneda;
import pe.com.cotelasa.scp.dominio.common.URLPaginacion;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioArticulo;
import pe.com.cotelasa.scp.dominio.service.IServicioBanco;
import pe.com.cotelasa.scp.dominio.service.IServicioCategoriaArticulo;
import pe.com.cotelasa.scp.dominio.service.IServicioCuentaBancaria;
import pe.com.cotelasa.scp.dominio.service.IServicioProveedorArticulo;
import pe.com.cotelasa.scp.dominio.service.IServicioProveedorServicio;
import pe.com.cotelasa.scp.dominio.service.IServicioSede;
import pe.com.cotelasa.scp.dominio.service.IServicioServicio;
import pe.com.cotelasa.scp.dominio.service.IServicioTipoContacto;
import pe.com.cotelasa.scp.dominio.service.IServicioUbigeo;
import pe.com.cotelasa.scp.entidad.Articulo;
import pe.com.cotelasa.scp.entidad.Contacto;
import pe.com.cotelasa.scp.entidad.CuentaBancaria;
import pe.com.cotelasa.scp.entidad.ParametroDetalle;
import pe.com.cotelasa.scp.entidad.Proveedor;
import pe.com.cotelasa.scp.entidad.ProveedorArticulo;
import pe.com.cotelasa.scp.entidad.ProveedorArticuloPK;
import pe.com.cotelasa.scp.entidad.ProveedorServicio;
import pe.com.cotelasa.scp.entidad.ProveedorServicioPK;
import pe.com.cotelasa.scp.entidad.Sede;
import pe.com.cotelasa.scp.entidad.Servicio;
import pe.com.cotelasa.scp.entidad.Ubigeo;
import pe.com.cotelasa.seguridad.controlador.backingBean.BKSession;

@Named(value = "MBProveedor")
@Scope("request")
public class MBProveedor extends MBGenerico implements IMantenedor, IObserver, Serializable {

    private static Logger logger = Logger.getLogger(MBProveedor.class);
    @Inject
    private BKProveedor bkProveedor;
    @Inject
    private BKContacto bkContacto;
    @Inject
    private BKComponenteLocal bkLocal;
    @Inject
    private BKComponenteCtaBancaria bkCuenta;
    @Inject
    private BKComponenteArticulo bkArticulo;
    @Inject
    private BKComponenteServicio bkServicio;
    @Inject
    private IServicioBanco servicioBanco;
    @Inject
    private IServicioProveedor servicioProveedor;
    @Inject
    private IServicioParametro servicioParametro;
    @Inject
    private IServicioUbigeo servicioUbigeo;
    @Inject
    private IServicioSede servicioLocal;
    @Inject
    private IServicioTipoContacto servicioTipoContacto;
    @Inject
    private IServicioTipoMoneda servicioTipoMoneda;
    @Inject
    private IServicioCuentaBancaria servicioCuenta;
    @Inject
    private IServicioCategoriaArticulo servicioCategoriaArticulo;
    @Inject
    private IServicioServicio servicioServicio;
    @Inject
    private IServicioArticulo servicioArticulo;
    @Inject
    private IServicioProveedorArticulo servicioProveedorArticulo;
    @Inject
    private IServicioProveedorServicio servicioProveedorServicio;
    @Inject
    private MBUbigeo mbUbigeo;
    @Inject
    private BKUbigeo bkUbigeo;
    private String URL;
    @Autowired
    BKSession session;

    public MBProveedor() {
    }

    public String mostrarMantenimiento() {
        resetearValores();
        //bkProveedor.setVerFormulario(false);
        bkProveedor.setProveedorBusqueda(new Proveedor());
        bkProveedor.getProveedorBusqueda().setRuc("");
        bkProveedor.getProveedorBusqueda().setNombreComercial("");
        bkProveedor.getProveedorBusqueda().setRazonSocial("");
        bkProveedor.setListaTodosProveedoresActivos(null);
        return URLPaginacion.Proveedor.URL_LISTA_PROVEEDOR;
    }

    public void buscarListaProveedor() {
        try {
            //bkProveedor.setListaTodosProveedoresActivos(new ArrayList<Proveedor>());
            //bkProveedor.setListaTodosProveedoresActivos(servicioProveedor.listarProveedorPorFiltro(bkProveedor.getProveedorBusqueda()));
            //Collection<Proveedor> listaProveedores = servicioProveedor.listarProveedorPorFiltro(bkProveedor.getProveedorBusqueda());
            bkProveedor.setListaTodosProveedoresActivos(servicioProveedor.listarProveedorPorFiltro(bkProveedor.getProveedorBusqueda()));
            /*boolean band = true;
            for (Proveedor prov : listaProveedores) {
                if (bkProveedor.getArticuloBusqueda() != null) {
                    if (prov.getArticuloCollection().contains(bkProveedor.getArticuloBusqueda())) {
                        band = true;
                    }else{
                        band = false;
                    }
                }
                if (bkProveedor.getServicioBusqueda() != null) {
                    if (prov.getServicioCollection().contains(bkProveedor.getServicioBusqueda())) {
                        band = true;
                    }else{
                        band = false;
                    }
                }
                if(band){
                    bkProveedor.getListaTodosProveedoresActivos().add(prov);
                }
                
            }*/

        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            e.printStackTrace();
            mostrarError("Ocurrio un error al cargar la lista de Proveedores");
        }
    }

    @Override
    public String nuevo() {
        bkProveedor.setComando(new ComandoGuardar(this));
        mbUbigeo.addObserver(this);
        bkProveedor.setProveedorModificar(new Proveedor());
        resetearValores();
        cargarValoresIniciales();
        bkProveedor.setProveedorFormulario(new Proveedor());
        bkProveedor.getProveedorFormulario().setTipoEntidad("J");

        bkProveedor.setVerFormulario(false);
        return URLPaginacion.Proveedor.URL_FORMULARIO_PROVEEDOR;
    }

    @Override
    public String editar() {
        bkProveedor.setComando(new ComandoActualizar(this));
        mbUbigeo.addObserver(this);
        resetearValores();
        bkProveedor.setVerFormulario(false);
        if (bkProveedor.getProveedorFormulario() != null) {
            bkProveedor.setProveedorModificar(bkProveedor.getProveedorFormulario());
            try {
                Proveedor proveedor = servicioProveedor.conseguirProveedorConUbigeo(bkProveedor.getProveedorFormulario().getId());
                //bkProveedor.setProveedorModificar(proveedor);
                bkProveedor.setProveedorFormulario(proveedor);
                cargarValoresIniciales();

                bkProveedor.setIdTipoMonedaFormulario(proveedor.getIdTipoMoneda().getId());

                bkUbigeo.inicializarValores(proveedor.getIdUbigeo().getIdPais(), proveedor.getIdUbigeo(), false, proveedor.getDescUbicacion());
                //System.out.println("lista cuentas bancarias: "+proveedor.getCuentaBancariaCollection());
                //bkCuenta.setListaCtaBancaria((List<CuentaBancaria>) );
                bkCuenta.setListaCtaBancariaEditar(new ArrayList<CuentaBancaria>());
                bkCuenta.getListaCtaBancariaEditar().addAll(proveedor.getCuentaBancariaCollection());
                bkCuenta.setListaCtaBancaria(new ArrayList<CuentaBancaria>());
                for(CuentaBancaria cuenta:bkCuenta.getListaCtaBancariaEditar()){
                    if(cuenta.getEstadoRegistro() == ESTADO_REGISTRO.ACTIVO.getValor()){
                        bkCuenta.getListaCtaBancaria().add(cuenta);
                    }
                    
                }
                
                //System.out.println("cuentas bancarias: "+bkCuenta.getListaCtaBancaria());
                for (Sede local : proveedor.getSedeCollection()) {
                    if (local.getSedeAdministradora() == 1) {
                        bkProveedor.setSedeAdminstradora(local);
                    } else {
                        if (local.getEstadoRegistro() == ESTADO_REGISTRO.ACTIVO.getValor()) {
                            bkLocal.getListaLocal().add(local);
                        }
                        bkLocal.getListaLocalEditar().add(local);
                    }
                }
                if (!bkProveedor.getSedeAdminstradora().getContactoCollection().isEmpty() || bkProveedor.getSedeAdminstradora().getContactoCollection() != null) {
                    bkContacto.setListaContactoEditar((List<Contacto>) bkProveedor.getSedeAdminstradora().getContactoCollection());

                    for (Contacto contacto : bkContacto.getListaContactoEditar()) {
                        if (contacto.getEstadoRegistro() == ESTADO_REGISTRO.ACTIVO.getValor()) {
                            bkContacto.getListaContacto().add(contacto);
                        }
                    }
                }

                ProveedorServicio provServ = new ProveedorServicio();
                provServ.setProveedor(proveedor);
                bkServicio.setListaServicio((List<ProveedorServicio>) servicioProveedorServicio.listarPorProveedor(provServ));
                for (ProveedorServicio proveSer : bkServicio.getListaServicio()) {
                    bkServicio.getListaServicioEditar().add(proveSer);
                }

                ProveedorArticulo provArti = new ProveedorArticulo();
                provArti.setProveedor(proveedor);
                bkArticulo.setListaArticulo((List<ProveedorArticulo>) servicioProveedorArticulo.listarPorProveedor(provArti));
                for (ProveedorArticulo proveArt : bkArticulo.getListaArticulo()) {
                    bkArticulo.getListaArticuloEditar().add(proveArt);
                }

            } catch (ServiceException e) {
                mostrarError("Ocurrieron algunos problemas al guardar la informacion. Vuelva a intentar.");
                System.err.println(e);
                e.printStackTrace();
                logger.error(e.getMessage(), e);
            }
            return URLPaginacion.Proveedor.URL_FORMULARIO_PROVEEDOR;
        } else {
            mostrarError("No ha Seleccionado Proveedor a Editar");
            return URLPaginacion.Proveedor.URL_LISTA_PROVEEDOR;
        }
    }

    @Override
    public String guardar() {
        Proveedor proveedor = bkProveedor.getProveedorFormulario();
        try {

            if (!validarRuc(proveedor.getRuc())) {
                mostrarError("El RUC ya ha sido registrado en otro proveedor");
                URL = URLPaginacion.Proveedor.URL_FORMULARIO_PROVEEDOR;
            } else if (!validarRazonSocial(proveedor.getRazonSocial())) {
                mostrarError("La RAZON SOCIAL ya ha sido registrada en otro proveedor");
                URL = URLPaginacion.Proveedor.URL_FORMULARIO_PROVEEDOR;
            } else {
                proveedor.setUsrCreacion(session.getUsuario().getUsuario());
                proveedor.setFecCreacion(new Date());


                Sede sedeAdmin = new Sede();
                sedeAdmin = inicializarSedeAdmin(proveedor, sedeAdmin);

                for (Contacto contacto : bkContacto.getListaContacto()) {
                    contacto.setIdSede(sedeAdmin);
                }

                sedeAdmin.setContactoCollection(bkContacto.getListaContacto());


                proveedor.setIdTipoMoneda(servicioTipoMoneda.conseguirTipoMonedaPorId(bkProveedor.getIdTipoMonedaFormulario()));
                

                for (CuentaBancaria cuenta : bkCuenta.getListaCtaBancaria()) {
                    cuenta.setIdProveedor(proveedor);
                    cuenta.setMontoActual(BigDecimal.ZERO);
                    //servicioCuenta.guardarCuentaBancaria(cuenta);
                }
                proveedor.setCuentaBancariaCollection(bkCuenta.getListaCtaBancaria());
                
                sedeAdmin.setIdUbigeo(proveedor.getIdUbigeo());
                bkLocal.getListaLocal().add(sedeAdmin);

                for (Sede local : bkLocal.getListaLocal()) {

                    local.setIdProveedor(proveedor);

                    //servicioLocal.guardarSede(local);
                }
                proveedor.setSedeCollection(bkLocal.getListaLocal());
                servicioProveedor.guardarProveedor(proveedor);
                
                for (ProveedorArticulo articulo : bkArticulo.getListaArticulo()) {

                    ProveedorArticuloPK provArt = new ProveedorArticuloPK(proveedor.getId(), articulo.getArticulo().getId());
                    articulo.setProveedor(proveedor);
                    articulo.setProveedorArticuloPK(provArt);
                    servicioProveedorArticulo.guardarProveedorArticulo(articulo);
                }

                for (ProveedorServicio servicio : bkServicio.getListaServicio()) {

                    servicio.setProveedor(proveedor);
                    ProveedorServicioPK provServ = new ProveedorServicioPK(proveedor.getId(), servicio.getServicio().getId());
                    servicio.setProveedorServicioPK(provServ);
                    servicioProveedorServicio.guardarProveedorServicio(servicio);
                }
                buscarListaProveedor();
                URL = editar();
                //URL = mostrarMantenimiento();
                mostrarMensaje("Se guardo los datos del proveedor satisfactoriamente.");
            }
        } catch (Exception e) {
            mostrarError("Ocurrieron algunos problemas al guardar la informacion. Vuelva a intentar.");
            e.printStackTrace();
            logger.error(e.getMessage(), e);
            URL = URLPaginacion.Proveedor.URL_FORMULARIO_PROVEEDOR;
        }
        return URL;
    }

    @Override
    public String actualizar() {
        try {
            Proveedor proveedor = bkProveedor.getProveedorFormulario();
            if (!validarRuc(proveedor.getRuc())) {
                mostrarError("El RUC ya ha sido registrado en otro preoveedor");
                URL = URLPaginacion.Proveedor.URL_FORMULARIO_PROVEEDOR;
            } else if (!validarRazonSocial(proveedor.getRazonSocial())) {
                mostrarError("La RAZON SOCIAL ya ha sido registrada en otro proveedor");
                URL = URLPaginacion.Proveedor.URL_FORMULARIO_PROVEEDOR;
            } else {
                proveedor.setUsrModificacion(session.getUsuario().getUsuario());
                proveedor.setFecModificacion(new Date());
                proveedor.setIdTipoMoneda(servicioTipoMoneda.conseguirTipoMonedaPorId(bkProveedor.getIdTipoMonedaFormulario()));

                //servicioProveedor.actualizarProveedor(proveedor);
                bkProveedor.getSedeAdminstradora().setDescUbicacion(proveedor.getDescUbicacion());
                bkProveedor.getSedeAdminstradora().setDireccion(proveedor.getDireccionLegal());
                bkProveedor.getSedeAdminstradora().setFecModificacion(new Date());
                bkProveedor.getSedeAdminstradora().setUsrModificacion(session.getUsuario().getUsuario());

                for (CuentaBancaria cuenta : bkCuenta.getListaCtaBancariaEditar()) {
                    if (cuenta.getId() == null) {
                        cuenta.setIdProveedor(proveedor);
                        cuenta.setMontoActual(BigDecimal.ZERO);
                        servicioCuenta.guardarCuentaBancaria(cuenta);
                    } else {
                        servicioCuenta.actualizarCuentaBancaria(cuenta);
                    }
                }
                proveedor.setCuentaBancariaCollection(bkCuenta.getListaCtaBancariaEditar());

                for (Contacto contacto : bkContacto.getListaContactoEditar()) {
                    if (contacto.getId() == null) {
                        contacto.setIdSede(bkProveedor.getSedeAdminstradora());
                    }
                }

                bkProveedor.getSedeAdminstradora().setContactoCollection(bkContacto.getListaContactoEditar());

                bkProveedor.getSedeAdminstradora().setIdUbigeo(proveedor.getIdUbigeo());
                bkLocal.getListaLocalEditar().add(bkProveedor.getSedeAdminstradora());

                for (Sede local : bkLocal.getListaLocalEditar()) {
                    if (local.getId() == null) {
                        //local.setIdUbigeo(proveedor.getIdUbigeo());
                        local.setIdProveedor(proveedor);

                        //servicioLocal.guardarSede(local);

                    } else {
                        //servicioLocal.actualizarSede(local);
                    }

                }
                proveedor.setSedeCollection(bkLocal.getListaLocalEditar());
                servicioProveedor.actualizarProveedor(proveedor);

                for (ProveedorArticulo articulo : bkArticulo.getListaArticuloEditar()) {
                    if (articulo.getProveedor() == null) {
                        articulo.setProveedor(proveedor);
                        ProveedorArticuloPK provArt = new ProveedorArticuloPK(proveedor.getId(), articulo.getArticulo().getId());
                        articulo.setProveedorArticuloPK(provArt);
                        servicioProveedorArticulo.guardarProveedorArticulo(articulo);
                    } else {
                        System.out.println("entro a actualizar el articulo wii");
                        servicioProveedorArticulo.actualizarProveedorArticulo(articulo);

                    }
                }

                for (ProveedorServicio servicio : bkServicio.getListaServicioEditar()) {
                    if (servicio.getProveedor() == null) {
                        servicio.setProveedor(proveedor);
                        ProveedorServicioPK provServ = new ProveedorServicioPK(proveedor.getId(), servicio.getServicio().getId());
                        servicio.setProveedorServicioPK(provServ);
                        servicioProveedorServicio.guardarProveedorServicio(servicio);
                    } else {
                        servicioProveedorServicio.actualizarProveedorServicio(servicio);
                    }
                }
                buscarListaProveedor();
                URL = editar();
                //URL = mostrarMantenimiento();
                mostrarMensaje("Se actualizo los datos del proveedor satisfactoriamente.");
            }

        } catch (Exception e) {
            mostrarError("Ocurrieron algunos problemas al guardar la informacion. Vuelva a intentar.");
            System.err.println(e);
            e.printStackTrace();
            logger.error(e.getMessage(), e);
            URL = URLPaginacion.Proveedor.URL_FORMULARIO_PROVEEDOR;
        }
        return URL;
    }

    private void cargarValoresIniciales() {
        try {
            bkContacto.setListaTipoContacto(servicioTipoContacto.listarTipoContactosActivos());
            bkCuenta.setListaBancos(servicioBanco.listarBancosActivos());
            bkCuenta.setListaTipoCtaBancaria(servicioParametro.listarTipoCuentaBancariaActivas());
            bkCuenta.setListaTipoMoneda(servicioTipoMoneda.listarTipoMonedasActivos());
            bkArticulo.setListaCategoriaArticuloActivos(servicioCategoriaArticulo.listarCategoriasArticulosActivos());
            bkServicio.setListaServicioActivos(servicioServicio.listarServiciosActivos());
            bkProveedor.setListaTipoProveedor(SelectOneMenuHelper.listaTipoProveedor((List<ParametroDetalle>) servicioParametro.listarTiposProveedoresActivos()));
            bkProveedor.setListaTipoMoneda(servicioTipoMoneda.listarTodosTipoMonedas());
        } catch (ServiceException e) {
            e.printStackTrace();
        }
    }

    private void resetearValores() {

        bkContacto.setEstaTipoComtacto(true);
        bkUbigeo.inicializarValores(null, null, false, null);
        bkContacto.setListaContacto(new ArrayList<Contacto>());
        bkContacto.setListaContactoEditar(new ArrayList<Contacto>());
        bkLocal.setListaLocal(new ArrayList<Sede>());
        bkLocal.setListaLocalEditar(new ArrayList<Sede>());
        bkCuenta.setListaCtaBancaria(new ArrayList<CuentaBancaria>());
        bkCuenta.setListaCtaBancariaEditar(new ArrayList<CuentaBancaria>());
        bkServicio.setListaServicio(new ArrayList<ProveedorServicio>());
        bkServicio.setListaServicioEditar(new ArrayList<ProveedorServicio>());
        bkArticulo.setListaArticulo(new ArrayList<ProveedorArticulo>());
        bkArticulo.setListaArticuloEditar(new ArrayList<ProveedorArticulo>());
        bkArticulo.setListaArticuloActivos(null);

        bkProveedor.setArticuloBusqueda(null);
        bkProveedor.setServicioBusqueda(null);

        try {
            bkProveedor.setListaArticulosBusqueda((List<Articulo>) servicioArticulo.listarArticulosActivos());
            bkProveedor.setListaServiciosBusqueda((List<Servicio>) servicioServicio.listarServiciosActivos());
        } catch (ServiceException e) {
            e.printStackTrace();
        }

    }

    public Sede inicializarSedeAdmin(Proveedor proveedor, Sede sede) {

        sede.setDescUbicacion(proveedor.getDescUbicacion());
        sede.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
        sede.setUsrCreacion(session.getUsuario().getUsuario());
        sede.setFecCreacion(new Date());
        sede.setSedeAdministradora(1);
        sede.setEsAlmacen((short) 1);
        sede.setEsTienda((short) 0);
        sede.setNombre("PRINCIPAL");
        sede.setNroSecGuiaRemision(0);
        sede.setNroSecFactura(0);
        sede.setDireccion(proveedor.getDireccionLegal());

        return sede;
    }

    public void cambiarTipoProveedor(AjaxBehaviorEvent event) {
        if (bkProveedor.getProveedorFormulario().getTipoEntidad().equalsIgnoreCase("N")) {
            bkProveedor.setTipoJuridico(true);
        } else {
            bkProveedor.setTipoJuridico(false);
        }
    }

    public boolean validarRuc(String ruc) {
        try {
            if (ruc.equals(bkProveedor.getProveedorModificar().getRuc())) {
                return true;
            } else {
                return servicioProveedor.validarRuc(ruc);
            }
        } catch (ServiceException e) {
            return false;
        }

    }

    public boolean validarRazonSocial(String razonSocial) {
        try {
            if (razonSocial.equals(bkProveedor.getProveedorModificar().getRazonSocial())) {
                return true;
            } else {
                return servicioProveedor.validarRazonSocial(razonSocial);
            }
        } catch (ServiceException e) {
            return false;
        }

    }

    @Override
    public String aceptar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void eliminar(ActionEvent actionEvent) {
        Proveedor proveedor = bkProveedor.getProveedorSeleccionado();

        proveedor.setUsrModificacion(session.getUsuario().getUsuario());
        proveedor.setFecModificacion(new Date());
        //logger.info("Eliminar cliente : " + bkCliente.getClienteSeleccionado());
        try {
            servicioProveedor.eliminarProveedor(proveedor);
            bkProveedor.setListaTodosProveedoresActivos(servicioProveedor.listarProveedorPorFiltro(bkProveedor.getProveedorBusqueda()));
        } catch (ServiceException ex) {
            ex.printStackTrace();
            logger.error(ex.getMessage(), ex);
            mostrarError("Ocurrio un problema al elminar el cliente");
        }
    }

    @Override
    public String ver() {
        editar();
        bkProveedor.setVerFormulario(true);
        return URLPaginacion.Proveedor.URL_VER_PROVEEDOR;
    }

    @Override
    public String retroceder() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String cancelar() {
        return URLPaginacion.Proveedor.URL_LISTA_PROVEEDOR;
        //return mostrarMantenimiento();
    }

    @Override
    public void actualizarObservador(Object object) {
        Map<String, Object> datos = (Map<String, Object>) object;
        bkProveedor.getProveedorFormulario().setDescUbicacion((String) datos.get("descripcionUbigeo"));
        bkProveedor.getProveedorFormulario().setIdUbigeo((Ubigeo) datos.get("ubigeo"));
    }
}
